package eps.einfacheGrafik.interna;

import java.util.HashMap;

import eps.einfacheGrafik.Bild;
import eps.einfacheGrafik.Dreieck;
import eps.einfacheGrafik.Ellipse;
import eps.einfacheGrafik.Rechteck;
import eps.einfacheGrafik.Text;
import eps.fortgeschritteneGrafik.interna.Grafik;
import eps.fortgeschritteneGrafik.interna.Zeichenfenster;
import static eps.fortgeschritteneGrafik.interna.Zeichenfenster.*;

/**
 * Diese Klasse implementiert einen statischen Grafikspeicher, der lediglich
 * dazu dient, auch Anfaengern ein Inspizieren von einfachen Grafiken in der
 * didaktischen Entwicklungsumgebung BlueJ zu ermoeglichen.
 * 
 * @author Florian Prager, Universitaet Passau
 * @version 02.2008
 */
public class GrafikSpeicher {
	/**
	 * Haelt die internen, fortgeschrittenen Grafiken zu den einfachen Grafiken
	 */
	private static HashMap<Object, Grafik> grafikMap = new HashMap<Object, Grafik>();

	/**
	 * Liefert die zugehoerige fortgeschrittene Grafik zu einer einfachen Grafik
	 */
	public static Grafik fortgeschrittenegrafikGeben(Object einfacheGrafik) {
		if (!grafikMap.containsKey(einfacheGrafik))
			return null;
		else
			return grafikMap.get(einfacheGrafik);
	}

	/**
	 * Meldet eine einfache Grafik (mit Standardzeichenfenster) im Speicher an
	 */
	public static void einfachegrafikAnmelden(Object einfacheGrafik) {
		einfachegrafikAnmelden(einfacheGrafik, null);
	}

	/**
	 * Meldet eine einfache Grafik im Speicher an
	 */
	public static void einfachegrafikAnmelden(Object einfacheGrafik,
			Zeichenfenster fenster) {
		if (fenster == null) {
			fenster = zeichenfensterGeben();
		}
		if (einfacheGrafik instanceof Bild)
			grafikMap.put(einfacheGrafik, new eps.fortgeschritteneGrafik.Bild(
					false, fenster));
		else
			if (einfacheGrafik instanceof Dreieck)
				grafikMap.put(einfacheGrafik,
						new eps.fortgeschritteneGrafik.Dreieck(false, fenster));
			else
				if (einfacheGrafik instanceof Ellipse)
					grafikMap.put(einfacheGrafik,
							new eps.fortgeschritteneGrafik.Ellipse(false,
									fenster));
				else
					if (einfacheGrafik instanceof Rechteck)
						grafikMap.put(einfacheGrafik,
								new eps.fortgeschritteneGrafik.Rechteck(false,
										fenster));
					else
						if (einfacheGrafik instanceof Text)//Text mit Standardschriftgroesse anmelden (kann entfernt werden)
							grafikMap.put(einfacheGrafik,
									new eps.fortgeschritteneGrafik.Text(false,
											fenster));
						else
							return;
		((eps.fortgeschritteneGrafik.interna.Grafik) grafikMap
				.get(einfacheGrafik)).fensterGeben().zeichenautomatStarten();
	}

	/**
	 * Meldet einen einfachen Text im Speicher an
	 */
	public static void einfachenTextAnmelden(int schriftgroesse, Object einfacheGrafik,
			Zeichenfenster fenster) {
		if (fenster == null) {
			fenster = zeichenfensterGeben();
		}
		if (einfacheGrafik instanceof Text)
			grafikMap.put(einfacheGrafik, new eps.fortgeschritteneGrafik.Text(
					schriftgroesse, false, fenster));
		else
			return;
		((eps.fortgeschritteneGrafik.interna.Grafik) grafikMap
				.get(einfacheGrafik)).fensterGeben().zeichenautomatStarten();
	}
}
